﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//int main()
//{
//	int a = 8;//向内存中申请4个字节的空间，用来存储8
//	//空间的名字为a，不过计算机看到的是地址而非a
//	return 0;
//}
//
//int main()
//{
//	int a = 8;//向内存中申请4个字节的空间，用来存储8
//	//空间的名字为a，不过计算机看到的是地址而非a
//	int* p = &a;//编号==地址==指针
//	//p被称为指针变量，理解为：存放指针的变量
//	printf("%p", &a);
//	return 0;
//}
//
//char ch = 'w';
//char* pc = &ch;
//
////pointer - 指针
//
//int main()
//{
//	int a = 10;
//	int* p = &a;//这里的*说明p是指针变量
//	*p = 0;//这里的 * - 解引用操作符（间接访问操作符）通过*p找到a
//	printf("%d", a);//0
//	return 0;
//}
//
//int main()
//{
//	char* pc;
//	printf("%zu", sizeof(pc));
//	printf("%zu", sizeof(char*));
//	printf("%zu", sizeof(int*));
//	printf("%zu", sizeof(short*));
//	printf("%zu", sizeof(long*));
//	printf("%zu", sizeof(long long*));
//	printf("%zu", sizeof(float*));
//	printf("%zu", sizeof(double*));
//	return 0;
//}

int main()
{
	int a = 0x11223344;
	//一个16进制位占4个二进制位，八个bit位占一个字节，那么11占一个字节，而a恰好占4个字节。
	int* pa = &a;
	*pa = 0;
	return 0;
}

int main()
{
	int a = 0x11223344;
	char* pa = &a;//字符指针认为它指向字符所以只改变一个字节
	*pa = 0;
	//double* pd = &a;//越界访问，非法访问内存
	//*pd = 0;
	return 0;
}

int main()
{
	int a = 10;
	int* pa = &a;
	char* pb = &a;//int*
	printf("pa = %p\n", pa);
	printf("pb = %p\n", pb);

	return 0;
}

int main()
{
	int a = 10;
	int* pa = &a;
	char* pb = &a;//int*
	printf("pa  = %p\n", pa);
	printf("pa+1= %p\n", pa + 1);
	printf("pa-1= %p\n", pa - 1);

	printf("pb  = %p\n", pb);
	printf("pb+1= %p\n", pb + 1);

	return 0;
}

int main()
{
	int a = 10;
	char* pc = &a;//会报警告

	char ch = 'w';
	void* pv = &a;
	pv = &ch;

	//*pv = 'e';  err
	//pv = pv + 1;  err

	return 0;
}

size_t my_strlen(char* p)
{
	char* start = p;
	while (*p)
	{
		p++;
	}
	return p - start;
}
int main()
{
	char arr[] = "asdfg";
	//数组名也是数组首元素的地址
	//arr == &arr[0]

	printf("%zu\n", my_strlen(arr));

	return 0;
}


//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	//打印数组的内容
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = arr;
//	while (p < sz + arr)
//	{
//		printf("%d ", *p);
//		p++;
//	}
//	return 0;
//}


//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}


int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int* p = &arr[0];
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *p);
		p++;
	}
	return 0;
}


int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = &arr[0];
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(p + i));//p+i 这⾥就是指针+整数 
	}
	return 0;
}

int main()
{
	char arr[] = "hello world";
	//printf("%s\n", arr);
	char* pc = &arr[0];
	while (*pc != '\0')
	{
		printf("%c", *pc);
		pc++;
	}
	return 0;
}

int main()
{
	char arr[] = "hello world";
	char* pc = &arr[0];
	while (*pc)
	{
		printf("%c", *pc);
		pc++;
	}
	return 0;
}

int main()
{
	int arr[10] = { 0 };
	printf("%lld\n", &arr[9] - &arr[0]);
	printf("%lld\n", &arr[0] - &arr[9]);
	
	return 0;
}
#include <string.h>

size_t my_strlen(char* p)
{
	size_t count = 0;//计数器
	while (*p)
	{
		count++;
		p++;
	}
	return count;
}

size_t my_strlen(char* p)
{
	char* start = p;
	while (*p) //使用p，来找到字符串中的\0
	{
		p++;
	}
	return p - start;
}
